/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package eeep.dao;

import eeep.entidades.Boletin;
import eeep.entidades.Identificacao;
import eeep.util.ConnectionFactory;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

/**
 *
 * @author Joao
 */
public class BoletinDAO {
      public void salvarBoletin(Boletin boletin){
        String sql = "insert into boletin(b1_boletin,b2_boletin,\n" +
                     "b3_boletin,b4_boletin,mf_boletin,id_pessoa,id_materia)\n" +
                     "values (?,?,?,?,?,(select id_pessoa from pessoa as p, \n" +
                     "identificacao as i where p.id_identificacao=i.id_identificacao \n" +
                     "and nome_identificacao=? and valor_identificacao=? ),\n" +
                     "(Select id_materia From materia where nome_materia=?))";

        Connection conn = null;
        PreparedStatement pstm = null;
        try {
            // Cria uma conexão com o banco
            conn = ConnectionFactory.getConexao();

            // Cria um PreparedStatment, classe usada para executar a query
            pstm = conn.prepareStatement(sql);

            // Adiciona o valor aos parametros da sql
            pstm.setDouble(1, boletin.getB1());
            pstm.setDouble(2, boletin.getB2());
            pstm.setDouble(3, boletin.getB3());
            pstm.setDouble(4, boletin.getB4());
            pstm.setDouble(5, boletin.getMF());
            pstm.setString(6, boletin.getPessoa().getIdentificacao().getNome());
            pstm.setString(7, boletin.getPessoa().getIdentificacao().getNome());
            pstm.setString(8, boletin.getMateria().getNome_materia());

            // Executa a sql para inserir os dados
            pstm.execute();

        } catch (Exception e) {

            e.printStackTrace();
        } finally {

            // Fecha as coneções
            try {
                if (pstm != null) {

                    pstm.close();
                }

                if (conn != null) {
                    conn.close();
                }

            } catch (Exception e) {

                e.printStackTrace();
            }
        }
    }
    public Boletin getBoletinPorMateiraPessoa(Boletin boletin){
        String sql = "Select b1_boletin,b2_boletin,b3_boletin,b4_boletin,\n" +
                     "mf_boletin From materia as m,boletin as b,pessoa as p,\n" +
                     "identificacao as i Where b.id_pessoa=p.id_pessoa and\n" +
                     "p.id_identificacao=i.id_identificacao and b.id_materia=m.id_materia\n" +
                     "and nome_identificacao=? and valor_identificacao=? and nome_materia=?";

		Connection conn = null;
		PreparedStatement pstm = null;
		// Classe que vai recuperar os dados do banco de dados
		ResultSet rset = null;

		try {
			conn = ConnectionFactory.getConexao();

			pstm = conn.prepareStatement(sql);
                        pstm.setString(1, boletin.getPessoa().getIdentificacao().getNome());
                        pstm.setString(2, boletin.getPessoa().getIdentificacao().getValor());
                        pstm.setString(3, boletin.getMateria().getNome_materia());

			rset = pstm.executeQuery();

			// Enquanto existir dados no banco de dados
			
                        while (rset.next()) {

				Boletin aux=boletin;
				

				// Recupera o nome do banco e atribui ele ao objeto

                                aux.setB1(rset.getDouble("b1_boletin"));
                                aux.setB2(rset.getDouble("b2_boletin"));
                                aux.setB3(rset.getDouble("b3_boletin"));
                                aux.setB4(rset.getDouble("b4_boletin"));
                                aux.setMF(rset.getDouble("MF_boletin"));
				return aux;
                        }
		} catch (Exception e) {

			e.printStackTrace();
		} finally {

			try {

				if (rset != null) {

					rset.close();
				}

				if (pstm != null) {

					pstm.close();
				}

				if (conn != null) {
					conn.close();
				}

			} catch (Exception e) {

				e.printStackTrace();
			}
		}

		return null;
    }
    public ArrayList<Boletin> getBoletinPorPessoa(Identificacao identificacao){
        String sql = "Select mf_boletin,nome_materia From materia as m,boletin as b,pessoa as p,\n" +
                     "identificacao as i Where b.id_pessoa=p.id_pessoa and\n" +
                     "p.id_identificacao=i.id_identificacao and b.id_materia=m.id_materia\n" +
                     "and nome_identificacao=? and valor_identificacao=?";

		Connection conn = null;
		PreparedStatement pstm = null;
		// Classe que vai recuperar os dados do banco de dados
		ResultSet rset = null;

		try {
			conn = ConnectionFactory.getConexao();

			pstm = conn.prepareStatement(sql);
                        pstm.setString(1, identificacao.getNome());
                        pstm.setString(2, identificacao.getValor());

			rset = pstm.executeQuery();

			// Enquanto existir dados no banco de dados
			ArrayList<Boletin> b=new ArrayList<>();
                        while (rset.next()) {

				Boletin aux=new Boletin();
				

				// Recupera o nome do banco e atribui ele ao objeto

                                
                                aux.setMF(rset.getDouble("MF_boletin"));
                                aux.getMateria().setNome_materia(rset.getString("nome_materia"));
				b.add(aux);
                        }
                        return b;
		} catch (Exception e) {

			e.printStackTrace();
		} finally {

			try {

				if (rset != null) {

					rset.close();
				}

				if (pstm != null) {

					pstm.close();
				}

				if (conn != null) {
					conn.close();
				}

			} catch (Exception e) {

				e.printStackTrace();
			}
		}

		return null;
    }
    public void deleteBoletin(Boletin boletin){
        String sql = "Delete From boletin Where id_boletin="
                + "(Select id_boletin From materia as m,boletin as b,pessoa as p,\n" +
                     "identificacao as i Where b.id_pessoa=p.id_pessoa and\n" +
                     "p.id_identificacao=i.id_identificacao and b.id_materia=m.id_materia\n" +
                     "and nome_identificacao=? and valor_identificacao=? and nome_materia=?)";

        Connection conn = null;
        PreparedStatement pstm = null;
        try {
            // Cria uma conexão com o banco
            conn = ConnectionFactory.getConexao();

            // Cria um PreparedStatment, classe usada para executar a query
            pstm = conn.prepareStatement(sql);

            // Adiciona o valor aos parametros da sql
            pstm.setString(1, boletin.getPessoa().getIdentificacao().getNome());
            pstm.setString(2, boletin.getPessoa().getIdentificacao().getValor());
            pstm.setString(3, boletin.getMateria().getNome_materia());
            

            // Executa a sql para inserir os dados
            pstm.execute();

        } catch (Exception e) {

            e.printStackTrace();
        } finally {

            // Fecha as coneções
            try {
                if (pstm != null) {

                    pstm.close();
                }

                if (conn != null) {
                    conn.close();
                }

            } catch (Exception e) {

                e.printStackTrace();
            }
        }
    }
    public void atualizarBoletin(Boletin boletin){
        String sql = "Update boletin as b Set b1_boletin=?,b2_boletin=?,\n" +
                     "b3_boletin=?,b4_boletin=?,MF_boletin=? From materia as m,pessoa as p,\n" +
                     "identificacao as i Where b.id_pessoa=p.id_pessoa and\n" +
                     "p.id_identificacao=i.id_identificacao and b.id_materia=m.id_materia\n" +
                     "and nome_identificacao=? and valor_identificacao=? and nome_materia=?";

        Connection conn = null;
        PreparedStatement pstm = null;
        try {
            // Cria uma conexão com o banco
            conn = ConnectionFactory.getConexao();

            // Cria um PreparedStatment, classe usada para executar a query
            pstm = conn.prepareStatement(sql);

            // Adiciona o valor aos parametros da sql
            pstm.setDouble(1, boletin.getB1());
            pstm.setDouble(2, boletin.getB2());
            pstm.setDouble(3, boletin.getB3());
            pstm.setDouble(4, boletin.getB4());
            pstm.setDouble(5, boletin.getMF());
            pstm.setString(6, boletin.getPessoa().getIdentificacao().getNome());
            pstm.setString(7, boletin.getPessoa().getIdentificacao().getNome());
            pstm.setString(8, boletin.getMateria().getNome_materia());
            

            // Executa a sql para inserir os dados
            pstm.execute();

        } catch (Exception e) {

            e.printStackTrace();
        } finally {

            // Fecha as coneções
            try {
                if (pstm != null) {

                    pstm.close();
                }

                if (conn != null) {
                    conn.close();
                }

            } catch (Exception e) {

                e.printStackTrace();
            }
        }
    }
}
